#pragma once


#ifdef RPG_PLATFORM_WINDOW

	#ifdef RPG_ENGINE_DLL
		#define	RPG_API __declspec(dllexport)
	#else
		#define RPG_API __declspec(dllimport)
	#endif // RPG_ENGINE_DLL

#else
	#error RPG only support Window
#endif // RPG_PLATFORM_WINDOW


#define BIT(x) (1 << x)


#ifdef RPG_ENABLE_ASSERT
	#define RPG_ASSERT(x,...){ if(!(x)){ RPG_ERROR("Assertion Failed {0}",__VA_ARGS__); __debugbreak(); } }
	#define RPG_CORE_ASSERT(x,...){ if(!(x)){ RPG_CORE_ERROR("Assertion Failed {0}",__VA_ARGS__); __debugbreak(); } }
#else
	#define RPG_ASSERT(x,...)
	#define RPG_CORE_ASSERT(x,...)
#endif // RPG_ENABLE_ASSETS


#define RPG_BIND_FN(x) std::bind(&x, this, std::placeholders::_1)